home *** CD-ROM | disk | FTP | other *** search
- ' File Name : QBMATRIX.BAS
- ' Program Name : QB Matrix
- ' Version : Ver 1.1
- ' Type : Freeware
- ' Developed : 4/15/93
- ' Author : Timothy Truman, David Pastore
- ' Revised : 7/8/96
- '
- ' Thanks for downloading QB Matrix !
- ' Please read through the text below before starting this program .
- '
- ' Copyright (c) 1996 Nocturnal Creations
- ' All rights reserved
- ' The author makes no warrenties about the operation of this program,
- ' expressed or implied.
- '
- ' This program may be freely distributed providing no changes are made
- ' to this program or it's support files. This program may not be
- ' distributed compiled.
- '
- ' Original functions and subroutines found in this source code may be used
- ' with permision from the author.
- '
- ' For information on ordering the QuickBASIC 4.5 version with
- ' greatly enhanced features read the MATRIX.TXT file.
- '
- ' Questions, comments or work related:
- ' AOL - Tim Truman
- ' Compuserve - 74734,2203
- ' INTERNET - TimTruman@aol.com
- '
- ' * INSTRUCTIONS *
- '
- ' Selecting play options :
- '-------------------------
- '
- ' Slam Mode - Setting slam mode will cause the piece in play
- ' to immediatly drop into position after pressing
- ' the down arrow key or the 2 key. Otherwise the
- ' down arrow key or key 2 on the numeric keypad must
- ' be held to drop the piece. Slam mode is best used
- ' after becomming familiar with the game.
- '
- ' Sound - Allows you to turn off the sound effects so you
- ' won't disturb the boss.
- '
- ' Level - The higher the selected level the faster the pieces
- ' will drop.
- '
- ' Handicap - Selecting a handicap greater than zero will fill the
- ' bottom of the pit with random blocks up to the number
- ' of rows equal to the handicap value selected.
- '
- ' Play Matrix - Start the game with the selected options.
- '
- ' Key usage during option screen:
- ' / - esc
- ' 8 - move cursor up
- ' 4 5 6 - move cursor left / press buttons / move cursor right
- ' 2 - move cursor down
- ' Or use the arrow keys and space bar.
-
-
- ' How to play :
- '--------------
- ' Get the falling pieces to fit the best you can within the
- ' confines of the pit. When complete rows are formed they will
- ' be cleared. This will make room for more pieces. When pieces land
- ' on the very top row of the pit the game will be over.
- '
- ' Key usage during game :
- ' / - esc
- ' 8 - spin piece ccwise
- ' 4 5 6 - move piece left / spin piece cwise / move piece right
- ' 2 - move piece down
- ' Ins Del - toggle slam mode / toggle sound
- ' Or use the arrow keys and space bar.
- '
- ' Scoring:
- '----------
- ' Points are awarded every time a piece land in the pit. The points
- ' recieved are calculated by the row the piece lands in and the current
- ' level. Simply, the higher the piece lands and the higher the level
- ' the more points that are added to the score.
- '
- 'Entering a highscore :
- '----------------------
- ' QB Matrix keeps the top 15 highscores. If you have beaten one of them
- ' a red blinking cursor will appear at your rank and you can enter a name
- ' or phrase of up to 23 charaters in length. The keys respond like a reqular
- ' text editor. Press enter when done.
-
- ' Enjoy The Game!
-
-
- DEFINT A-Z
-
- TYPE highscores 'type for highscores
- rank AS STRING * 3 'rank
- dat AS STRING * 8 'date
- nam AS STRING * 25 'name
- lines AS STRING * 4 'lines cleared
- num AS STRING * 6 'Score
- END TYPE
-
- TYPE hues 'define the type for hues
- red AS INTEGER 'red component
- grn AS INTEGER 'green component
- blu AS INTEGER 'blue component
- END TYPE
-
- DECLARE SUB P3x5Num (x, y, num, colour)
- DECLARE SUB EndGame ()
- DECLARE SUB TileScreen (tile)
- DECLARE SUB Button (x, y, opt, size, fill)
- DECLARE SUB BlankPal ()
- DECLARE SUB CalcRowDiff ()
- DECLARE SUB ChangePitPal ()
- DECLARE SUB Clearbuffer ()
- DECLARE SUB CheckForCleared ()
- DECLARE SUB DisplayNextPiece ()
- DECLARE SUB DoFillPit ()
- DECLARE SUB DrawBlocks ()
- DECLARE SUB DrawPlayPiece (x, y, playpiece, piecepostion)
- DECLARE SUB DrawPlayScreen ()
- DECLARE SUB DropPlayPiece ()
- DECLARE SUB DropRows ()
- DECLARE SUB Editor (score() AS highscores, cnt)
- DECLARE SUB EndToQBasic ()
- DECLARE SUB Eraserows ()
- DECLARE SUB Findrowdiff ()
- DECLARE SUB GameEnd ()
- DECLARE SUB GetArea (ax, ay, bx, by, replace)
- DECLARE SUB GetHighScores (mode)
- DECLARE SUB GetOptions ()
- DECLARE SUB MarkCptRows ()
- DECLARE SUB PauseGame ()
- DECLARE SUB p5x7font (px, y, Message$, colour)
- DECLARE SUB RestorePal ()
- DECLARE SUB StoreToGrid ()
- DECLARE SUB ShowHighScores (score() AS highscores, mode)
- DECLARE SUB SoundFX (fx%)
- DECLARE SUB sortgridarray ()
- DECLARE SUB Stay (Millisecs!)
- DECLARE SUB TitleScreen ()
- DECLARE SUB Updatescore ()
- DECLARE SUB UpdatePieceMeter (restart)
-
- DECLARE FUNCTION CheckMove (mode)
- DECLARE FUNCTION CheckRotate ()
- DECLARE FUNCTION Colorvalue& (attribute)
- DECLARE FUNCTION GetPiece ()
- DECLARE FUNCTION InputText$ (x, y, length)
- DECLARE FUNCTION TimeToDrop ()
- DECLARE FUNCTION ReturnEvent ()
-
- COMMON SHARED grid(), blocks(), masks(), font(), smallnum(), meterpieces()
- COMMON SHARED completerows()
- COMMON SHARED xpiece, ypiece, pieceorientation, playpiece, piecelanded
- COMMON SHARED gamescore&, oldhigh$, sngle, duble, triple, matrix
- COMMON SHARED levelnum, droptime!, linescleared, levelmark, nextlevelmark
- COMMON SHARED handicap, soundmode, slammode, gameover, Xpit, Ypit
-
- 'mapped key values
- CONST F1 = -59
- CONST F2 = -60
- CONST F3 = -61
- CONST up = -72
- CONST left = -75
- CONST right = -77
- CONST down = -80
- CONST Insert = -82
- CONST backspace = 8
- CONST enter = 13
- CONST Esc = 27
- CONST space = 32
- CONST Plus = 43
- CONST Minus = 45
- CONST Zero = 48
- CONST Dot = 46
- CONST Slash = 47
- CONST two = 50
- CONST Four = 52
- CONST five = 53
- CONST Six = 54
- CONST Eight = 56
-
- 'other
- CONST True = 1
- CONST false = 0
- CONST blockheight = 7
- CONST blockwidth = 11
- CONST drop = 1
-
-
- OUT &H60, &HF3 'inform keyboard port
- FOR d& = 1 TO 800: NEXT 'let hardware settle
- OUT &H60, 0 'send fast typematic rate
-
- DEF fnrnd (num) = INT(RND * num) + 1 'function for random number generation
- RANDOMIZE TIMER 'seed the random number generator
-
- SCREEN 13 'set video
-
- LOCATE 10, 15: COLOR 7
- PRINT "Please Wait." 'next few routines take some time
-
- DIM completerows(1 TO 4) 'DIM array to hold completed rows
-
- DIM grid(0 TO 22, 0 TO 12) 'DIM array for play pit
-
- FOR y = 0 TO 22 'to contain moves
- grid(y, 0) = 1
- NEXT
- FOR y = 0 TO 22 'ditto
- grid(y, 11) = 1
- NEXT
- FOR x = 0 TO 11 'ditto
- grid(22, x) = 1
- NEXT
-
- DIM smallnum(9, 5, 3) 'DIM array for small numbers
- FOR offset = 0 TO 9 'first to last
- FOR ypos = 1 TO 5 'top to bottom
- FOR xpos = 1 TO 3 'left to right
- READ dat 'READ data
- smallnum(offset, ypos, xpos) = dat 'store the data
- NEXT
- NEXT
- NEXT
-
-
- DIM masks(27, 3, 3) 'DIM array for masks
- FOR offset = 0 TO 27 'first to last
- FOR bity = 0 TO 3 'top to bottom
- FOR bitx = 0 TO 3 'left to right
- READ dat 'get data
- masks(offset, bity, bitx) = dat 'store to array
- NEXT
- NEXT
- NEXT
-
- DIM meterpieces(6, 20, 8) 'DIM array for meter pieces
- FOR offset = 0 TO 6 'first to last
- FOR y = 1 TO 8 'top to bottom
- FOR x = 1 TO 20 'left to right
- READ dat 'READ data
- meterpieces(offset, x, y) = dat 'store to array
- NEXT
- NEXT
- NEXT
-
- DIM font(127, 4, 6) 'DIM array for fonts
- FOR offset = 0 TO 127 'read in fonts
- FOR y = 0 TO 6 'top to bottom
- FOR x = 0 TO 4 'left to right
- READ dat 'get data
- font(offset, x, y) = dat 'store it
- NEXT
- NEXT
- NEXT
-
- OPEN "QBMATRIX.OPT" FOR BINARY AS #1 'check for existance of .opt
- length = LOF(1)
- CLOSE #1
- IF length = 0 THEN 'file did not exist
- OPEN "QBMATRIX.OPT" FOR OUTPUT AS #1 'create file with defaults
- levelnum = 0: handicap = 0: slammode = 0: soundmode = 1
- WRITE #1, levelnum, handicap, slammode, soundmode
- CLOSE #1
- ELSE 'file exists
- OPEN "QBMATRIX.OPT" FOR INPUT AS #1 'load saved options
- INPUT #1, levelnum, handicap, slammode, soundmode
- CLOSE #1
- END IF
-
- Stay (1) 'initilaize delay routine
- BlankPal 'hide the screen writes
- DrawBlocks 'makes blocks used to make play pieces
- CLS 'clear screen
- RestorePal 'restore pallete
- TitleScreen 'draw intro screen
- CLS 'clear screen
-
- droptime! = .5 'initialize drop speed
- GetOptions
- Xpit = 11 'set start position
- Ypit = 35 'ditto
- 'levelnum = 0 'initialize level
- 'handicap = 0 'initialize handicap
- levelmark = 30 'initialize level occurance
- nextlevelmark = levelmark 'set
- ChangePitPal 'initialize pit color
- DrawPlayScreen 'initilaize play screen
- UpdatePieceMeter (-1) 'initialize meter
- playpiece = GetPiece 'initialize playpiece
- xpiece = Xpit * 6 'ditto
- ypiece = Ypit 'ditto
- DoFillPit 'in case of handicap
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation ' ditto
-
- DO 'main loop
-
- event = ReturnEvent 'get event
-
- IF TimeToDrop THEN event = drop
-
- SELECT CASE event 'process event
- CASE Esc, Slash, Minus: EndToQBasic 'user wants out
- CASE Plus: PauseGame 'nature calling ?
- CASE up, Eight, space, five 'do rotate
- rempiece = pieceorientation 'to restore
- pieceorientation = (pieceorientation + 1) MOD 4 'adjust
- IF CheckRotate THEN 'ok ?
- DrawPlayPiece xpiece, ypiece, playpiece, rempiece 'remove
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'draw new
- ELSE 'not ok
- pieceorientation = rempiece 'restore
- END IF
-
- CASE left, Four 'do left
- IF CheckMove(left) THEN 'ok ?
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'remove
- xpiece = xpiece - blockwidth 'adjust
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'draw new
- END IF
-
- CASE right, Six 'do right
- IF CheckMove(right) THEN 'ok?
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'remove
- xpiece = xpiece + blockwidth 'adjust
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'draw new
- END IF
-
- CASE drop
- IF CheckMove(down) THEN 'ok ?
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'remove
- ypiece = ypiece + blockheight 'adjust
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'draw new
- ELSE 'not ok ?
- IF ypiece <= Ypit + blockheight THEN 'at top ?
- gameover = True 'set flag
- EndGame 'end game
- END IF 'otherwise
- piecelanded = True 'change piece color
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation ' ditto
- piecelanded = false 'did it
- CheckForCleared
- Updatescore 'taly score
- xpiece = Xpit * 6 'reset
- ypiece = Ypit 'ditto
- pieceorientation = 0 'reset
- playpiece = GetPiece 'get new
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'draw
- END IF
-
- CASE down, two 'do down
- DO
- IF CheckMove(down) THEN 'ok ?
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'remove
- ypiece = ypiece + blockheight 'adjust
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'draw new
- ELSE 'not ok ?
- IF ypiece <= Ypit + blockheight THEN 'at top ?
- gameover = True 'set flag
- EndGame 'end game
- END IF 'otherwise
- piecelanded = True 'change piece color
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'ditto
- piecelanded = false 'did it
- CheckForCleared
- Updatescore 'taly score
- xpiece = Xpit * 6 'reset
- ypiece = Ypit 'ditto
- pieceorientation = 0 'reset
- playpiece = GetPiece 'get new
- DrawPlayPiece xpiece, ypiece, playpiece, pieceorientation 'draw
- EXIT DO
- END IF
- LOOP WHILE slammode
-
- CASE Dot
- soundmode = NOT soundmode 'toggle sound mode
- LINE (274, 75)-(294, 85), 17, BF 'clear old text
- IF soundmode THEN 'print new
- p5x7font 274, 75, "On", 81 'ditto
- ELSE 'ditto
- p5x7font 274, 75, "Off", 80 'ditto
- END IF
-
- CASE Insert, Zero 'do insert
- IF slammode THEN 'slammode on
- slammode = NOT slammode 'change it
- LINE (274, 62)-(294, 70), 17, BF 'clear old
- p5x7font 274, 62, "Off", 7 'report
- ELSE 'slammode off
- slammode = NOT slammode 'change it
- LINE (274, 62)-(294, 70), 17, BF 'clear old
- p5x7font 274, 62, "On", 15 'report
- END IF
-
- END SELECT
-
- LOOP
-
-
-
- 'Small Numbers
-
- DATA 1,1,1
- DATA 1,0,1
- DATA 1,0,1
- DATA 1,0,1
- DATA 1,1,1
-
- DATA 0,1,0
- DATA 0,1,0
- DATA 0,1,0
- DATA 0,1,0
- DATA 0,1,0
-
- DATA 1,1,1
- DATA 0,0,1
- DATA 1,1,1
- DATA 1,0,0
- DATA 1,1,1
-
- DATA 1,1,1
- DATA 0,0,1
- DATA 0,1,1
- DATA 0,0,1
- DATA 1,1,1
-
- DATA 1,0,1
- DATA 1,0,1
- DATA 1,1,1
- DATA 0,0,1
- DATA 0,0,1
-
- DATA 1,1,1
- DATA 1,0,0
- DATA 1,1,1
- DATA 0,0,1
- DATA 1,1,1
-
- DATA 1,0,0
- DATA 1,0,0
- DATA 1,1,1
- DATA 1,0,1
- DATA 1,1,1
-
- DATA 1,1,1
- DATA 0,0,1
- DATA 0,0,1
- DATA 0,0,1
- DATA 0,0,1
-
- DATA 1,1,1
- DATA 1,0,1
- DATA 1,1,1
- DATA 1,0,1
- DATA 1,1,1
-
- DATA 1,1,1
- DATA 1,0,1
- DATA 1,1,1
- DATA 0,0,1
- DATA 0,0,1
-
-
-
- 'Data For Masks
-
- 'playpiece 0
- DATA 1,1,1,1
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 0,1,0,0
- DATA 0,1,0,0
- DATA 0,1,0,0
- DATA 0,1,0,0
-
- DATA 1,1,1,1
- DATA 0,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 0,1,0,0
- DATA 0,1,0,0
- DATA 0,1,0,0
- DATA 0,1,0,0
-
- 'playpiece 1
- DATA 1,1,1,0
- DATA 0,1,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 0,1,0,0
- DATA 1,1,0,0
- DATA 0,1,0,0
- DATA 0,0,0,0
-
- DATA 0,1,0,0
- DATA 1,1,1,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,0,0,0
- DATA 1,1,0,0
- DATA 1,0,0,0
- DATA 0,0,0,0
- 'playpiece 2
- DATA 1,1,0,0
- DATA 1,1,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,1,0,0
- DATA 1,1,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,1,0,0
- DATA 1,1,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,1,0,0
- DATA 1,1,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- 'playpiece 3
- DATA 1,1,1,0
- DATA 0,0,1,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 0,1,0,0
- DATA 0,1,0,0
- DATA 1,1,0,0
- DATA 0,0,0,0
-
- DATA 1,0,0,0
- DATA 1,1,1,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,1,0,0
- DATA 1,0,0,0
- DATA 1,0,0,0
- DATA 0,0,0,0
- 'playpiece 4
-
- DATA 1,1,1,0
- DATA 1,0,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,1,0,0
- DATA 0,1,0,0
- DATA 0,1,0,0
- DATA 0,0,0,0
-
- DATA 0,0,1,0
- DATA 1,1,1,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,0,0,0
- DATA 1,0,0,0
- DATA 1,1,0,0
- DATA 0,0,0,0
-
- 'playpiece 5
- DATA 0,1,1,0
- DATA 1,1,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,0,0,0
- DATA 1,1,0,0
- DATA 0,1,0,0
- DATA 0,0,0,0
-
- DATA 0,1,1,0
- DATA 1,1,0,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 1,0,0,0
- DATA 1,1,0,0
- DATA 0,1,0,0
- DATA 0,0,0,0
- 'playpiece 6
-
- DATA 1,1,0,0
- DATA 0,1,1,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 0,1,0,0
- DATA 1,1,0,0
- DATA 1,0,0,0
- DATA 0,0,0,0
-
- DATA 1,1,0,0
- DATA 0,1,1,0
- DATA 0,0,0,0
- DATA 0,0,0,0
-
- DATA 0,1,0,0
- DATA 1,1,0,0
- DATA 1,0,0,0
- DATA 0,0,0,0
-
-
- 'bitmaps for random meters
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
- DATA 4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7
- DATA 4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7
- DATA 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
-
- DATA 0,0,0,0,0,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39
- DATA 0,0,0,0,0,34,36,36,36,36,36,36,36,36,36,36,36,36,36,39
- DATA 0,0,0,0,0,34,36,36,36,36,36,36,36,36,36,36,36,36,36,39
- DATA 0,0,0,0,0,34,34,34,34,34,34,36,36,36,34,34,34,34,34,39
- DATA 0,0,0,0,0,0 ,0 ,0 ,0 ,0 ,34,36,36,36,39,0 ,0 ,0 ,0 ,0
- DATA 0,0,0,0,0,0 ,0 ,0 ,0 ,0 ,34,36,36,36,39,0 ,0 ,0 ,0 ,0
- DATA 0,0,0,0,0,0 ,0 ,0 ,0 ,0 ,34,36,36,36,39,0 ,0 ,0 ,0 ,0
- DATA 0,0,0,0,0,0 ,0 ,0 ,0 ,0 ,34,34,34,34,39,0 ,0 ,0 ,0 ,0
-
- DATA 0,0,0,0,0,0,0,0,0,0,127,127,127,127,127,127,127,127,127,127
- DATA 0,0,0,0,0,0,0,0,0,0,122,125,125,125,125,125,125,125,125,127
- DATA 0,0,0,0,0,0,0,0,0,0,122,125,125,125,125,125,125,125,125,127
- DATA 0,0,0,0,0,0,0,0,0,0,122,125,125,125,125,125,125,125,125,127
- DATA 0,0,0,0,0,0,0,0,0,0,122,125,125,125,125,125,125,125,125,127
- DATA 0,0,0,0,0,0,0,0,0,0,122,125,125,125,125,125,125,125,125,127
- DATA 0,0,0,0,0,0,0,0,0,0,122,125,125,125,125,125,125,125,125,127
- DATA 0,0,0,0,0,0,0,0,0,0,122,122,122,122,122,122,122,122,122,127
-
- DATA 0,0,0,0,0,15,15,15,15,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,12,14,14,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,12,14,14,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,12,14,14,14,15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,12,14,14,14,15,15,15,15,15,15,15,15,15,15,15
- DATA 0,0,0,0,0,12,14,14,14,14,14,14,14,14,14,14,14,14,14,15
- DATA 0,0,0,0,0,12,14,14,14,14,14,14,14,14,14,14,14,14,14,15
- DATA 0,0,0,0,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,15
-
- DATA 0,0,0,0,0,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30
- DATA 0,0,0,0,0,25,28,28,28,28,28,28,28,28,28,28,28,28,28,30
- DATA 0,0,0,0,0,25,28,28,28,28,28,28,28,28,28,28,28,28,28,30
- DATA 0,0,0,0,0,25,28,28,28,25,25,25,25,25,25,25,25,25,25,25
- DATA 0,0,0,0,0,25,28,28,28,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,25,28,28,28,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,25,28,28,28,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,25,25,25,25,30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,103,103,103,103,103,103,103,103,103,103
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,100,102,102,102,102,102,102,102,102,103
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,100,102,102,102,102,102,102,102,102,103
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,100,102,102,102,100,100,100,100,100,103
- DATA 0,0,0,0,0,103,103,103,103,103,100,102,102,102,103, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,100,102,102,102,102,102,102,102,102,103, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,100,102,102,102,102,102,102,102,102,103, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,100,100,100,100,100,100,100,100,100,103, 0, 0, 0, 0, 0
-
- DATA 0,0,0,0,0,48,48,48,48,48,48,48,48,48,48, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,43,45,45,45,45,45,45,45,45,48, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,43,45,45,45,45,45,45,45,45,48, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0,43,43,43,43,43,43,45,45,45,48, 0, 0, 0, 0, 0
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,43,45,45,45,48,48,48,48,48,48
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,43,45,45,45,45,45,45,45,45,48
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,43,45,45,45,45,45,45,45,45,48
- DATA 0,0,0,0,0, 0, 0, 0, 0, 0,43,43,43,43,43,43,43,43,43,48
-
-
-
- 'font bitmaps, duplicates first 128 charactors of ASCII set
- ' 0 NUL
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- ' 1
- DATA 1,1,0,1,1
- DATA 1,1,0,1,1
- DATA 0,1,0,1,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- ' 2
- DATA 1,1,1,1,1
- DATA 1,0,1,0,1
- DATA 1,0,1,0,1
- DATA 1,1,1,1,1
- DATA 1,0,1,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- ' 3
- DATA 0,0,0,0,0
- DATA 0,1,0,1,0
- DATA 1,1,1,1,1
- DATA 1,1,1,1,1
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- '4
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 1,1,1,1,1
- DATA 1,1,1,1,1
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- '5
- DATA 0,1,1,1,0
- DATA 0,1,1,1,0
- DATA 1,1,1,1,1
- DATA 1,1,1,1,1
- DATA 1,1,1,1,1
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- '6
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 1,1,1,1,1
- DATA 1,1,0,1,1
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- '7
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 0,1,1,1,0
- DATA 1,1,1,1,1
- DATA 1,1,1,1,1
- DATA 0,0,0,1,0
- '8
- DATA 1,1,1,1,1
- DATA 1,1,0,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,0,1
- '9
- DATA 0,0,0,0,0
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- DATA 0,0,0,0,0
- '10
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- DATA 0,1,1,1,0
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '11
- DATA 0,0,1,1,1
- DATA 0,0,0,1,1
- DATA 0,0,1,0,1
- DATA 0,1,1,0,0
- DATA 1,0,0,1,0
- DATA 1,0,0,1,0
- DATA 0,1,1,0,0
- '12
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- '13
- DATA 0,0,1,1,1
- DATA 0,0,1,0,0
- DATA 0,0,1,1,0
- DATA 0,0,1,0,0
- DATA 1,1,1,0,0
- DATA 1,1,1,0,0
- DATA 1,1,1,0,0
- '14
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 0,1,0,0,1
- DATA 1,1,0,0,1
- DATA 1,1,0,1,1
- DATA 0,0,0,1,1
- '15
- DATA 1,0,1,0,1
- DATA 0,1,1,1,0
- DATA 0,1,0,1,0
- DATA 1,1,0,1,1
- DATA 0,1,0,1,0
- DATA 0,1,1,1,0
- DATA 1,0,1,0,1
- '16
- DATA 1,1,0,0,0
- DATA 1,1,1,0,0
- DATA 1,1,1,1,0
- DATA 1,1,1,1,1
- DATA 1,1,1,1,0
- DATA 1,1,1,0,0
- DATA 1,1,0,0,0
- '17
- DATA 0,0,0,1,1
- DATA 0,0,1,1,1
- DATA 0,1,1,1,1
- DATA 1,1,1,1,1
- DATA 0,1,1,1,1
- DATA 0,0,1,1,1
- DATA 0,0,0,1,1
- '18
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- '19
- DATA 1,1,0,1,1
- DATA 1,1,0,1,1
- DATA 1,1,0,1,1
- DATA 1,1,0,1,1
- DATA 1,1,0,1,1
- DATA 0,0,0,0,0
- DATA 1,1,0,1,1
- '20
- DATA 1,1,1,1,1
- DATA 1,1,0,1,0
- DATA 1,1,0,1,0
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- '21
- DATA 0,0,1,1,0
- DATA 0,1,0,0,1
- DATA 0,0,1,0,0
- DATA 0,0,0,1,0
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,0
- '22
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,1,1,1,1
- '23
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- DATA 1,1,1,1,1
- '24
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 1,1,1,1,1
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- '25
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 1,1,1,1,1
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- '26
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,1,0
- DATA 1,1,1,1,1
- DATA 0,0,1,1,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- '27
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,1,1,0,0
- DATA 1,1,1,1,1
- DATA 0,1,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- '28
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '29
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,1,0,1,0
- DATA 1,1,1,1,1
- DATA 0,1,0,1,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '30
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 1,1,1,1,1
- '31
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- '32
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '33
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,0
- '34
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '35
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 1,1,1,1,1
- DATA 0,1,0,1,0
- DATA 1,1,1,1,1
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- '36
- DATA 0,0,1,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,1
- DATA 0,0,1,0,0
- '37
- DATA 1,1,0,0,0
- DATA 1,1,0,0,1
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 1,0,0,1,1
- DATA 0,0,0,1,1
- '38
- DATA 0,1,1,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 0,1,0,0,0
- DATA 1,0,1,1,0
- DATA 1,0,1,1,0
- DATA 0,1,0,0,1
- '39
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '40
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 0,1,0,0,0
- '41
- DATA 1,0,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- '42
- DATA 0,0,0,0,0
- DATA 1,0,1,0,1
- DATA 0,1,1,1,0
- DATA 1,1,1,1,1
- DATA 0,1,1,1,0
- DATA 1,0,1,0,1
- DATA 0,0,0,0,0
- '43
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,1,1,1,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '44
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- '45
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,1,1,1,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '46
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,0
- '47
- DATA 0,0,0,0,0
- DATA 0,0,0,0,1
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- DATA 0,0,0,0,0
- '48
- 'Numbers
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- '49
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- '50
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- '51
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,1,1,1,0
- DATA 0,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- '52
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- '53
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,0
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,0
- '54
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- '55
- DATA 1,1,1,1,0
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- '56
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- '57
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,1,1,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- '58
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- '59
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- '60
- DATA 0,0,0,0,0
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,1,0
- DATA 0,0,0,0,0
- '61
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '62
- DATA 0,0,0,0,0
- DATA 0,1,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 0,0,0,0,0
- '63
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- '64
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,1,0,1
- DATA 1,0,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,1
- DATA 0,1,1,1,0
- ' 65 Capitol
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '66
- DATA 1,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,0
- '67
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- '68
- DATA 1,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,0
- '69
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- '70
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- '71
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '72
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '73
- DATA 1,1,1,1,1
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 1,1,1,1,1
- '74
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '75
- DATA 1,0,0,0,1
- DATA 1,0,0,1,0
- DATA 1,0,1,0,0
- DATA 1,1,0,0,0
- DATA 1,0,1,0,0
- DATA 1,0,0,1,0
- DATA 1,0,0,0,1
- '76
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- '77
- DATA 1,1,1,1,1
- DATA 1,0,1,0,1
- DATA 1,0,1,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '78
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '79
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '80
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- '81
- DATA 0,1,1,1,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,0,0,1,1
- DATA 0,1,1,1,1
- '82
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,1,0,0,0
- DATA 1,0,1,0,0
- DATA 1,0,0,1,1
- '83
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,1
- '84
- DATA 1,1,1,1,1
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- '85
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '86
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 0,0,1,0,0
- '87
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,1,0,1
- DATA 1,0,1,0,1
- DATA 1,1,1,1,1
- '88
- DATA 1,0,0,0,1
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 1,0,0,0,1
- '89
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,0,1,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- '90
- DATA 1,1,1,1,1
- DATA 0,0,0,0,1
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- '91
- DATA 0,1,1,1,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,1,1,0
- '92
- DATA 0,0,0,0,0
- DATA 1,0,0,0,0
- DATA 0,1,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,1,0
- DATA 0,0,0,0,1
- DATA 0,0,0,0,0
- '93
- DATA 0,1,1,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,1,1,1,0
- '94
- DATA 0,0,1,0,0
- DATA 0,1,0,1,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '95
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- '96
- DATA 0,0,1,0,0
- DATA 0,0,0,1,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '97
- 'Lower case
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '98
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '99
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- '100
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '101
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- '102
- DATA 0,0,1,1,1
- DATA 0,1,0,0,0
- DATA 1,1,1,1,1
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- '103
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,1
- '104
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '105
- DATA 1,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- '106
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 1,1,1,1,0
- '107
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,1
- DATA 1,0,0,1,0
- DATA 1,1,1,0,0
- DATA 1,0,0,1,0
- DATA 1,0,0,0,1
- '108
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- '109
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,1,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '110
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- '111
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '112
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- '113
- DATA 1,1,1,1,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- '114
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- DATA 1,0,0,0,0
- '115
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 1,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,1
- '116
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 1,1,1,1,1
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- '117
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- '118
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 0,1,0,1,0
- DATA 0,1,0,1,0
- DATA 0,0,1,0,0
- '119
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,1,0,1
- DATA 1,1,1,1,1
- '120
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,0,0,0,1
- DATA 0,1,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,1,0
- DATA 1,0,0,0,1
- '121
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
- DATA 0,0,0,0,1
- DATA 0,0,0,0,1
- DATA 1,1,1,1,1
- '122
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 1,1,1,1,1
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 1,1,1,1,1
- '123
- DATA 0,0,1,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 1,0,0,0,0
- DATA 0,1,0,0,0
- DATA 0,1,0,0,0
- DATA 0,0,1,0,0
- '124
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- DATA 0,0,1,0,0
- '125
- DATA 0,0,1,0,0
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,0,0,1
- DATA 0,0,0,1,0
- DATA 0,0,0,1,0
- DATA 0,0,1,0,0
- '126
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,1
- DATA 0,1,0,1,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- '127
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,0,0,0
- DATA 0,0,1,0,0
- DATA 0,1,0,1,0
- DATA 1,0,0,0,1
- DATA 1,1,1,1,1
-
-
- '// data for cursor pointer in choseoptions
-
- DATA 1,0,0,0,0,0
- DATA 1,1,0,0,0,0
- DATA 1,1,1,0,0,0
- DATA 1,1,1,1,0,0
- DATA 1,1,1,1,1,0
- DATA 1,1,1,1,1,1
- DATA 1,1,0,0,0,0
- DATA 1,0,0,0,0,0
-
-
-
- 'data to recontruct qbmatrix.scr in the event it is erased
-
- DATA 1. ,04/11/94 ,Timothy Truman, 0,100
- DATA 2. ,04/15/94 ,David Pastore, 0,100
- DATA 3. ,04/25/94 ,John Matias, 0,100
- DATA 4. ,04/15/94 ,Denise Eberts, 0,100
- DATA 5. ,04/18/94 ,Mike, 0, 50
- DATA 6. ,04/18/94 ,Bonnie Soffan, 0, 50
- DATA 7. ,04/19/94 ,Patty Effilo, 0, 50
- DATA 8. ,04/11/94 ,Kelsi, 0, 45
- DATA 9. ,04/21/94 ,Tracy, 0, 45
- DATA 10.,04/21/94 ,Heather, 0, 45
- DATA 11.,04/22/94 ,Pop Tart, 0, 30
- DATA 12.,04/23/94 ,Muffin Man, 0, 30
- DATA 13.,04/23/94 ,Cindy Bell, 0, 30
- DATA 14.,04/23/94 ,John Smith, 0, 20
- DATA 15.,04/25/94 ,Jane Doe, 0, 20
-
- SUB BlankPal
- OUT &H3C8, 0 'inform video card
- FOR reg = 0 TO 144 'blank first 144 registers
- OUT &H3C9, 0 'send red component
- OUT &H3C9, 0 'send red component
- OUT &H3C9, 0 'send green comonent
- NEXT
- END SUB
-
- SUB Button (x, y, opt, size, fill)
-
- 'draws the shaded buttons on the options screen and load/save game screen.
- Clearbuffer
-
- offsety = 14
-
- SELECT CASE (size)
-
- CASE 0
- offsetx = 16
- CASE 1
- offsetx = 66
- CASE 2
- offsetx = 150
- CASE 3
- offsetx = 66
- offsety = 34
- CASE 4
- offsetx = 130
- offsety = 15
- END SELECT
-
-
- SELECT CASE (opt)
-
- CASE 0
-
- LINE (x, y)-(x + offsetx, y), 24
- LINE (x + 2, y + 1)-(x + offsetx - 2, y + 1), 24
-
- LINE (x + offsetx, y)-(x + offsetx, y + offsety), 24
- LINE (x + offsetx - 1, y + 1)-(x + offsetx - 1, y + offsety - 2), 24
-
- LINE (x, y)-(x, y + offsety), 18
- LINE (x + 1, y + 1)-(x + 1, y + offsety - 1), 18
-
- LINE (x, y + offsety)-(x + offsetx, y + offsety), 18
- LINE (x + 1, y + offsety - 1)-(x + offsetx - 1, y + offsety - 1), 18
-
- CASE 1
-
- LINE (x, y)-(x + offsetx, y), 18
- LINE (x + 2, y + 1)-(x + offsetx - 2, y + 1), 18
-
- LINE (x + offsetx, y)-(x + offsetx, y + offsety), 18
- LINE (x + offsetx - 1, y + 1)-(x + offsetx - 1, y + offsety - 2), 18
-
- LINE (x, y)-(x, y + offsety), 24
- LINE (x + 1, y + 1)-(x + 1, y + offsety - 1), 24
-
- LINE (x, y + offsety)-(x + offsetx, y + offsety), 24
- LINE (x + 1, y + offsety - 1)-(x + offsetx - 1, y + offsety - 1), 24
-
- END SELECT
-
- IF fill THEN LINE (x + 2, y + 2)-(x + offsetx - 2, y + offsety - 2), 126, BF
-
-
-
- END SUB
-
- SUB ChangePitPal
-
- ' Changes pit color atribute each time it is called.
- ' After ten times it recycles back to the first color.
-
-
- STATIC initialize, colour
-
- IF initialize = 0 THEN
- initialize = 1
- colour = levelnum
- IF colour > 9 THEN colour = 9
- END IF
-
- SELECT CASE colour
-
- CASE 0 ' grays (If using Matrix.pal)
- PALETTE 212, Colorvalue&(140) ' highlight color
- PALETTE 204, Colorvalue&(132) ' shade color
- PALETTE 208, Colorvalue&(136) ' block color
-
- CASE 1 ' use the colors of piece 0
- PALETTE 212, Colorvalue&(7) ' hc
- PALETTE 204, Colorvalue&(4) ' sc
- PALETTE 208, Colorvalue&(6) ' bc
-
- CASE 2 ' use the colors of piece 1
- PALETTE 212, Colorvalue&(39) ' hc
- PALETTE 204, Colorvalue&(34) ' sc
- PALETTE 208, Colorvalue&(36) ' bc
-
- CASE 3 ' use the colors of piece 2
- PALETTE 212, Colorvalue&(127) ' hc
- PALETTE 204, Colorvalue&(122) ' sc
- PALETTE 208, Colorvalue&(125) ' bc
-
- CASE 4 ' use the colors of piece 3
- PALETTE 212, Colorvalue&(15) ' hc
- PALETTE 204, Colorvalue&(12) ' sc
- PALETTE 208, Colorvalue&(14) ' bc
-
- CASE 5 ' use the colors of piece 4
- PALETTE 212, Colorvalue&(30) ' hc
- PALETTE 204, Colorvalue&(25) ' sc
- PALETTE 208, Colorvalue&(28) ' bc
-
- CASE 6 ' use the colors of piece 5
- PALETTE 212, Colorvalue&(103) ' hc
- PALETTE 204, Colorvalue&(100) ' sc
- PALETTE 208, Colorvalue&(102) ' bc
-
- CASE 7 ' use the colors of piece 6
- PALETTE 212, Colorvalue&(48) ' hc
- PALETTE 204, Colorvalue&(43) ' sc
- PALETTE 208, Colorvalue&(45) ' bc
-
- CASE 8 ' pink (If using Matrix.pal)
- PALETTE 212, Colorvalue&(63) ' hc
- PALETTE 204, Colorvalue&(59) ' sc
- PALETTE 208, Colorvalue&(61) ' bc
-
- CASE 9 ' brown(If using Matrix.pal)
- PALETTE 212, Colorvalue&(55) ' hc
- PALETTE 204, Colorvalue&(51) ' sc
- PALETTE 208, Colorvalue&(53) ' bc
-
- END SELECT
-
- colour = (colour + 1) MOD 10 ' increment the color
-
-
- END SUB
-
- SUB CheckForCleared
-
- 'store landing in grid grid array
- FOR xmask = 0 TO 3 'left to right
- FOR ymask = 0 TO 3 'top to bottom
- offset = (playpiece * 4) + pieceorientation 'get offset for mask
- IF masks(offset, ymask, xmask) = 1 THEN 'Bit there ?
- gridx = (((xpiece + (xmask * blockwidth)) / blockwidth) - 1)
- gridy = (((ypiece + (ymask * blockheight))) / blockheight) - 5
- grid(gridy, gridx) = 1
- END IF
- NEXT
- NEXT
-
- Clearbuffer
- CALL SoundFX(0) 'make landing noise
- Clearbuffer
-
- 'find complete rows
- FOR ygrid = 0 TO 21 'top to bottom
- FOR xgrid = 1 TO 10 'left to right
- IF grid(ygrid, xgrid) = 1 THEN xcount = xcount + 1 'increment if occupied
- IF xcount = 10 THEN 'complete row ?
- numrows = numrows + 1 'increment rowcount
- completerows(numrows) = ygrid 'store the row value for later
- END IF
- NEXT
- xcount = 0 'new row
- NEXT
-
- DIM word$(4, 10) 'DIM array for text
- 'stuff arrays with text
- word$(1, 1) = " ": word$(2, 1) = " ": word$(3, 1) = " ": word$(4, 1) = " ":
- word$(1, 2) = " ": word$(2, 2) = " ": word$(3, 2) = " ": word$(4, 2) = " ":
- word$(1, 3) = "S": word$(2, 3) = "D": word$(3, 3) = "T": word$(4, 3) = "M"
- word$(1, 4) = "I": word$(2, 4) = "O": word$(3, 4) = "R": word$(4, 4) = "A"
- word$(1, 5) = "N": word$(2, 5) = "U": word$(3, 5) = "I": word$(4, 5) = "T"
- word$(1, 6) = "G": word$(2, 6) = "B": word$(3, 6) = "P": word$(4, 6) = "R"
- word$(1, 7) = "L": word$(2, 7) = "L": word$(3, 7) = "L": word$(4, 7) = "I"
- word$(1, 8) = "E": word$(2, 8) = "E": word$(3, 8) = "E": word$(4, 8) = "X"
- word$(1, 9) = " ": word$(2, 9) = " ": word$(3, 9) = " ": word$(4, 9) = " ":
- word$(1, 10) = " ": word$(2, 10) = " ": word$(3, 10) = " ": word$(4, 10) = " ":
-
- DIM pit(10000) 'DIM array to store pit
- DIM image(43) 'DIM array to store blocks
-
- IF numrows THEN 'found cleared rows ?
- FOR columns = 1 TO 10 'left to right
- FOR rows = 1 TO numrows 'first row to last
- x = (columns + 1) * 11 'calculate x screen position
- y = ((completerows(rows) + 5) * 7) 'calculate y screen positon
- 'GET whats there
- GET (x, y)-(x + blockwidth - 1, y + blockheight - 1), image
- PUT (x, y), image 'PUT it back to erase
-
- SELECT CASE numrows 'print charactor at cleared x
- CASE 1: ele$ = word$(1, letter) 'ditto
- CASE 2: ele$ = word$(2, letter) 'ditto
- CASE 3: ele$ = word$(3, letter) 'ditto
- CASE 4: ele$ = word$(4, letter) 'ditto
- END SELECT
- p5x7font x, y, ele$, 212 'ditto
- NEXT
- Stay (15) 'slow down the action
- letter = letter + 1 'increment for next charactor
- NEXT 'next row
- SoundFX (1) 'make row clear noise
- END IF
-
-
-
- 'now erase the text and clear the row in the grid() array
- FOR column = 1 TO 10 'left to right
- x = (column + 1) * 11 'calc x
- FOR row = 1 TO numrows 'first cleared row to last
- posy = (completerows(row) + 5) * 7 'calc y
- GET (x, y)-(x + blockwidth - 1, y + blockheight - 1), image 'GET area
- PUT (x, y), image 'PUT to erase
- NEXT
- NEXT
-
- 'graphicaly drop blocks above cleared rows down and sort grid array
-
- FOR row = 1 TO numrows
- FOR ygrid = completerows(numrows) TO 1 STEP -1'count from cleared row up
- FOR xgrid = 1 TO 10 'left to right
- grid(ygrid, xgrid) = grid(ygrid - 1, xgrid) 'drop rows in grid
- NEXT 'next column
- NEXT 'next row
-
- xget = (blockwidth) + Xpit 'calc left side of pit
- xend = ((blockwidth + 1) * 10) + Xpit 'calc right side of pit
- ytoget = (completerows(row) * blockheight) + Ypit - 1 'calc bottom y
- ytodrop = (Ypit + blockheight) 'calc y drop
-
- GET (xget, Ypit)-(xend, ytoget), pit 'GET pit
- PUT (xget, Ypit), pit 'PUT to erase
- PUT (xget, ytodrop), pit, PSET 'PUT to drop
- NEXT
-
- IF numrows THEN
- SoundFX (0) 'make landing noise
- linescleared = linescleared + numrows 'add lines cleared
- SELECT CASE numrows 'add line clear types
- CASE 1: sngle = sngle + 1 'increment
- CASE 2: duble = duble + 1 'ditto
- CASE 3: triple = triple + 1 'ditto
- CASE 4: triple = triple + 1 'ditto
- END SELECT
- END IF
-
- END SUB
-
- FUNCTION CheckMove (mode)
-
- ok = True 'assume piece can move
-
- offset = (playpiece * 4) + pieceorientation 'calc offset
-
- FOR xmask = 0 TO 3 'left to right
- FOR ymask = 0 TO 3 'top to bottom
- IF masks(offset, ymask, xmask) = 1 THEN 'bit there ?
-
- xgrid = ((xpiece + (xmask * blockwidth)) / blockwidth) - 1 'calc grid
- ygrid = ((ypiece + (ymask * blockheight)) / blockheight) - 5 'ditto
-
- SELECT CASE mode 'which direction ?
- CASE right
- IF grid(ygrid, xgrid + 1) = 1 THEN ok = false 'look right
- CASE left
- IF grid(ygrid, xgrid - 1) = 1 THEN ok = false 'look left
- CASE down
- IF grid(ygrid + 1, xgrid) = 1 THEN ok = false 'look down
- END SELECT
- END IF
- NEXT
- NEXT
-
-
- CheckMove = ok
-
- END FUNCTION
-
- FUNCTION CheckRotate
-
- ok = True 'assume piece can be rotated
-
- offset = (playpiece * 4) + pieceorientation 'calc offset
-
- FOR xmask = 0 TO 3 'left to right
- FOR ymask = 0 TO 3 'top to bottom
- IF masks(offset, ymask, xmask) = 1 THEN
- xgrid = ((xpiece + (xmask * blockwidth)) / blockwidth) - 1
- ygrid = ((ypiece + (ymask * blockheight)) / blockheight) - 5
- IF grid(ygrid, xgrid) = 1 THEN ok = false
- END IF
- NEXT
- NEXT
-
- CheckRotate = ok
-
- END FUNCTION
-
- SUB Clearbuffer 'clear key buffer
- DEF SEG = &H40 'point to low memory
- POKE &H1A, PEEK(&H1C) 'point head to tail
- END SUB
-
- FUNCTION Colorvalue& (attribute)
- ' returns color value of requested attribute
- OUT &H3C7, attribute ' Inform video card of request
- red = INP(&H3C9) ' get red component
- grn = INP(&H3C9) ' get green component
- blu = INP(&H3C9) ' get blue component
- Colorvalue& = (65536 * blu) + (256 * grn) + red ' Calculate color value
-
- END FUNCTION
-
- SUB DoFillPit
-
-
- DIM holes(3) 'dim array for hole values
-
- endy = 22 - handicap 'how far up the pit ?
-
- FOR ygrid = 21 TO endy STEP -1 'start at bottom
- screeny = (ygrid + 5) * 7 'calc graphic coordinate
-
- FOR num = 0 TO 3
- holes(num) = (RND * 10) + 1 'generate hole values
- NEXT
-
- FOR xgrid = 1 TO 10 'left to right
-
- nohole = True 'reset flag
- FOR num = 0 TO 3 'check for holes
- IF holes(num) = xgrid THEN nohole = false 'don't put a block
- NEXT
-
- IF nohole = True THEN
- screenx = (xgrid + 1) * 11 'calc graphic coordinate
- PUT (screenx, screeny), blocks(77, 8) 'PUT block
- grid(ygrid, xgrid) = 1 ' store value into grid array
- END IF
-
- NEXT xgrid
- NEXT ygrid
-
-
-
- END SUB
-
- SUB DrawBlocks
-
- DEFINT A-Z
-
- REDIM blocks(77, 10) ' need storage area
-
- ' start Drawing and storing blocks
- DO
-
- row = 0
- Row2 = row + 7 - 1
- col = col + 15
- col2 = col + 11 - 1
-
- colour = colour + 1
-
- SELECT CASE (colour)
- CASE (1) ' reds
- bc = 6 ' bc - block color
- sc = 4 ' sc - shade color
- hc = 7 ' hc - highlight color
-
- CASE (2)
- bc = 36: sc = 34: hc = 39 ' purples
-
- CASE (3)
- bc = 125: sc = 122: hc = 127 ' blues
-
- CASE (4)
- bc = 14: sc = 12: hc = 15 ' greens
-
- CASE (5)
- bc = 28: sc = 25: hc = 30 ' yellows
-
- CASE (6)
- bc = 102: sc = 100: hc = 103 ' light blues
-
- CASE (7)
- bc = 45: sc = 43: hc = 48 ' dark oranges
-
- CASE (8)
- bc = 136: sc = 132: hc = 140 ' grays
-
- CASE (9)
- bc = 208: sc = 204: hc = 212 ' color changing blocks
- END SELECT
-
- LINE (col, row)-(col2, Row2), bc, BF ' draw block
- LINE (col, Row2)-(col2, Row2), sc ' shade bottom
- LINE (col2, row)-(col2, Row2), hc ' highlight right side
- LINE (col, row)-(col2, row), hc ' higlight top
- LINE (col, row)-(col, Row2), sc ' shade left side
-
- GET (col, row)-(col2, Row2), blocks(77, colour) ' store block
-
-
- LOOP UNTIL colour = 9
-
-
- END SUB
-
- SUB DrawPlayPiece (x, y, playpiece, pieceorientation)
-
- ' Draws playpiece at x,y in position pieceorientation. If piece has stoped
- ' traveling ,piecelanded will be true and playpiece will change color.
-
-
- FOR xscan = 0 TO 3
- FOR yscan = 0 TO 3
- offset = (playpiece * 4) + pieceorientation
- IF masks(offset, yscan, xscan) = 1 THEN
- xpos = (xscan * blockwidth)
- ypos = (yscan * blockheight)
- IF piecelanded THEN
- PUT (xpos + x, ypos + y), blocks(77, playpiece + 1)
- PUT (xpos + x, ypos + y), blocks(77, 9)
- ELSE
- PUT (xpos + x, ypos + y), blocks(77, playpiece + 1)
- END IF
- END IF
- NEXT
- NEXT
-
- END SUB
-
- SUB DrawPlayScreen
-
-
-
- ' border
- PUT (11, 0), blocks(77, 3) ' top left corner
- FOR backx = 22 TO 294 STEP 11 ' top line
- PUT (backx, 0), blocks(77, 3)
- NEXT
- PUT (backx, 0), blocks(77, 3) ' top Right Corner
-
- FOR backy = 7 TO 183 STEP 7
- PUT (backx, backy), blocks(77, 3) ' right side
- NEXT
- PUT (backx, backy), blocks(77, 3) ' bottom right corner
- FOR backx = 286 TO 22 STEP -11 ' right bottom
- PUT (backx, backy), blocks(77, 3)
- NEXT
- PUT (backx, backy), blocks(77, 3) ' bottom left corner
- FOR backy = 7 TO 184 STEP 7
- PUT (backx, backy), blocks(77, 3) ' left side
- NEXT
-
- LINE (132, 48)-(296, 188), 121, BF
- LINE (132, 48)-(132, 188), 122
- LINE (200, 100)-(296, 100), 125
- LINE (132, 100)-(132, 188), 125
-
- p5x7font 140, 95, "Statistics", 74
- LINE (132, 93)-(200, 105), 125, B
- LINE (132, 48)-(296, 48), 125
- LINE (132, 93)-(132, 48), 125
- LINE (230, 48)-(230, 100), 125
- LINE (230, 60)-(296, 60), 125
-
- GetHighScores (1)
-
- p5x7font 136, 50, "Score", 68
- p5x7font 170, 50, "0", 69
- p5x7font 136, 65, "HighScore", 70
- p5x7font 190, 65, oldhigh$, 71
- p5x7font 136, 80, "Lines", 72
- p5x7font 166, 80, "0", 68
-
- p5x7font 234, 62, "Insert", 76
- IF slammode THEN
- p5x7font 274, 62, "On", 15
- ELSE
- p5x7font 274, 62, "Off", 7
- END IF
-
- p5x7font 235, 75, "Sound", 79
- IF soundmode THEN
- p5x7font 275, 75, "On", 81
- ELSE
- p5x7font 275, 75, "Off", 80
- END IF
-
- p5x7font 240, 49, "Messages", 74
- p5x7font 22, 6, "Next", 65
- levelnum$ = LTRIM$(STR$(levelnum))
- p5x7font 111, 14, levelnum$, 67
- p5x7font 99, 6, "Level", 66
- p5x7font 250, 110, "Singles", 84
- p5x7font 250, 130, "Doubles", 86
- p5x7font 250, 150, "Triples", 88
- p5x7font 250, 170, "Matrixs", 90
-
-
- END SUB
-
- SUB EndGame
-
- SoundFX 4
- LINE (44, 57)-(109, 84), 21, BF 'make a plate
- LINE (44, 57)-(109, 84), 23, B 'ditto
- p5x7font 49, 66, "GAME OVER", 140 'let em know what happened
- DO: LOOP UNTIL ReturnEvent 'wait for a keypress
- GetHighScores (0) 'display highscores
- RUN 'restart Matrix
- END
-
- END SUB
-
- SUB EndToQBasic
-
-
- x1 = 105: x2 = 210: y1 = 50: y2 = 115 'define box
-
- GetArea x1, y1, x2, y2, 0 'save area
-
- LINE (x1, y1)-(x2, y2), 29, BF 'draw box
- LINE (x1, y1)-(x2, y2), 26, B 'ditto
-
- p5x7font 120, 67, "Exit to Qbasic", 32 'print text
- p5x7font 120, 68, "Exit to Qbasic", 0 'print text
-
- p5x7font 127, 79, " (Y/N) ", 32 'ditto
- p5x7font 127, 78, " (Y/N) ", 0 'ditto
-
- p5x7font 127, 89, " (R)estart ", 32 'ditto
- p5x7font 127, 88, " (R)estart ", 0 'ditto
-
- DO 'input loop
-
- a$ = INKEY$ 'get key press
- SELECT CASE a$ 'process it
- CASE "Y", "y": END
- CASE "N", "n": EXIT DO
- CASE "R", "r": RUN
- END SELECT
-
- LOOP
-
- GetArea x1, y1, x2, y2, 1 'restore screen
-
- END SUB
-
- SUB GetArea (ax, ay, bx, by, replace)
-
- STATIC x, y, stor()
-
- IF replace = 0 THEN
- size1 = ax - bx
- size2 = ay - by
- totalsize = size1 * size2
- REDIM stor(totalsize)
- GET (ax, ay)-(bx, by), stor
- x = ax
- y = ay
- ELSE
- PUT (x, y), stor, PSET
- ERASE stor
- END IF
-
- END SUB
-
- SUB GetHighScores (mode)
-
- DIM score(1 TO 16) AS highscores
-
- filespec$ = "QBMATRIX.SCR"
-
- OPEN filespec$ FOR RANDOM AS #1 LEN = 46 'open file
- FOR n = 1 TO 15 'first to last
- GET #1, n, score(n) 'load it in
- NEXT n 'next entry
- CLOSE #1 'close the file
-
- IF VAL(score(1).num) = 0 THEN 'did file exist
- OPEN filespec$ FOR RANDOM AS #1 LEN = 46 'create file
- FOR n = 1 TO 15 'first to last
- READ a$, B$, c$, d$, e$ 'read in data
- score(n).rank = a$ 'store it
- score(n).dat = B$ 'ditto
- score(n).nam = c$ 'ditto
- score(n).lines = d$ 'ditto
- score(n).num = e$ 'ditto
- PUT #1, n, score(n) 'write it
- NEXT n 'next entry
- CLOSE #1 'close file
- END IF
-
-
- SELECT CASE mode
-
- CASE 0
-
- Temp$ = LTRIM$(STR$(gamescore&)) 'convert to clean string
- addpad = 6 - LEN(Temp$) 'calc padding
- gamescor$ = Temp$ + STRING$(addpad, 32) 'add it
-
- FOR rank = 1 TO 15 'find players rank
-
- IF gamescore& > VAL(score(rank).num) THEN 'make the list ?
-
- FOR bump = 14 TO rank STEP -1 'sort it
- score(bump + 1).dat = score(bump).dat 'bump ahead
- score(bump + 1).nam = score(bump).nam 'ditto
- score(bump + 1).lines = score(bump).lines 'ditto
- score(bump + 1).num = score(bump).num 'ditto
- NEXT 'bump next
- month$ = MID$(DATE$, 1, 2) 'get month
- day$ = MID$(DATE$, 4, 2) 'get day
- year$ = MID$(DATE$, 9, 2) 'get year
- format$ = month$ + "/" + day$ + "/" + year$ 'format the date
- score(rank).dat = format$ 'store it
- score(rank).lines = LTRIM$(STR$(linescleared)) 'store it
- score(rank).num = gamescor$ 'store gamescore
- score(rank).nam = ""
- ShowHighScores score(), 1 'print the list
- y = (rank * 10) + 26 'calc y
- score(rank).nam = InputText$(93, y, 24) 'enter name
- OPEN filespec$ FOR RANDOM AS #1 LEN = 46 'open file
- FOR n = 1 TO 15 'first to last
- PUT #1, n, score(n) 'write entry
- NEXT 'next entry
- CLOSE #1 'close file
- EXIT FOR 'all done
- END IF
- NEXT
-
- CASE 1 'return highscore
- oldhigh$ = score(1).num
- CASE 2
- ShowHighScores score(), 0 'print the list
- END SELECT
-
-
-
- END SUB
-
- SUB GetOptions
-
- xmin = 20 'set cursor limits
- ymin = 20
- xmax = 300
- ymax = 190
-
- CLS
-
- LINE (11, 7)-(307, 188), 124, BF 'make a background plate
-
- TileScreen (0)
-
-
- 'ini buttons
- Button 35, 24, 0, 1, 1 'quick drop
- Button 35, 44, 0, 1, 1 'ditto
- Button 219, 24, 0, 1, 1 'sound mode
- Button 219, 44, 0, 1, 1 'ditto
- Button 126, 24, 0, 3, 1 'Play matrix
-
- ' print headers
- p5x7font 140, 10, "Options", 95
- p5x7font 149, 32, "Play", 0
- p5x7font 135, 43, "QB Matrix", 0
- p5x7font 150, 31, "Play", 84
- p5x7font 136, 42, "QB Matrix", 84
- p5x7font 145, 62, "Level", 96
- p5x7font 136, 92, "Handicap", 96
- p5x7font 48, 28, "Slam on", 96
- p5x7font 48, 48, "Slam off", 96
- p5x7font 216, 28, " Sound On", 96
- p5x7font 214, 48, " Sound Off", 96
-
- p5x7font 14, 148, " Use Arrow keys or numeric key pad to move cursor.", 96
- p5x7font 32, 158, " Press space bar or 5 key to press buttons.", 96
-
-
- x = 45 'level number buttons
- FOR n = 0 TO 9
- Button x - 5, 74, 0, 0, 1
- p5x7font x, 77, CHR$(n + 48), 96
- x = x + 25
- NEXT n
-
- x = 45 'number handicap buttons
- FOR n = 0 TO 9
- Button x - 5, 104, 0, 0, 1
- p5x7font x, 107, CHR$(n + 48), 96
- x = x + 25
- NEXT n
-
- 'set previous options
- xbut = (levelnum * 25) + 40 'calc button
- Button xbut, 74, 1, 0, 0 'push it in
- xbut = (handicap * 25) + 40 'calc button
- Button xbut, 104, 1, 0, 0 'push it in
-
-
- IF slammode THEN 'Set slammode
- Button 35, 24, 1, 1, 0
- ELSE
- Button 35, 44, 1, 1, 0
- END IF
-
- IF soundmode THEN 'set sound
- Button 219, 24, 1, 1, 0 'push button
- ELSE 'sound off
- Button 219, 44, 1, 1, 0 'push button
- END IF
-
-
-
- PALETTE 255, (65536 * 0) + (256 * 0) + 60 'define cusor
- curwidth = 6 'ditto
- curheight = 8 'ditto
- DIM cursor(1 TO curwidth, 1 TO curheight) 'dim array
- FOR y = 1 TO curheight 'top to bottom
- FOR x = 1 TO curwidth 'left to right
- READ dat 'read data
- cursor(x, y) = dat 'store to array
- NEXT
- NEXT
-
-
- xcur = 160: ycur = 40 'set position
-
- bytes = ((xcur + curwidth) * (ycur + curheight)) / 2 + 2 'calc bytes
- DIM background(bytes) 'to restore background
-
-
-
- DO ' input loop
-
-
- GET (xcur, ycur)-(xcur + curwidth, ycur + curheight), background
-
- FOR y = 1 TO curheight
- FOR x = 1 TO curwidth 'Draw cursor
- IF cursor(x, y) = 1 THEN PSET (xcur + x, ycur + y), 255
- NEXT
- NEXT
-
- DO
- event = ReturnEvent
- red = red + 1: IF red > 63 THEN red = 10 'strobe cursor
- PALETTE 255, (65536 * blu) + (256 * grn) + red 'ditto
- LOOP UNTIL event
-
- PUT (xcur, ycur), background, PSET
-
-
- SELECT CASE event
- 'process events
- CASE Esc
- EndToQBasic
- CASE up, Eight
- IF ycur > ymin THEN ycur = ycur - 6
- CASE down, two
- IF ycur < ymax THEN ycur = ycur + 6
- CASE left, Four
- IF xcur > xmin THEN xcur = xcur - 6
- CASE right, Six
- IF xcur < xmax THEN xcur = xcur + 6
- CASE enter, space, five
-
- IF xcur >= 126 AND xcur <= 191 THEN
- SELECT CASE ycur
- CASE 25 TO 57 'Play Matrix
- OPEN "QBMATRIX.OPT" FOR OUTPUT AS #1 'open file
- WRITE #1, levelnum, handicap, slammode, soundmode 'save game options
- CLOSE #1 'close the file
- EXIT DO 'leave options screen
- END SELECT
- END IF
-
- IF ycur >= 74 AND ycur <= 88 THEN 'level select
- IF xcur >= 40 AND xcur <= 280 THEN
- FOR x = 40 TO 265 STEP 25 'reset all buttons
- Button x, 74, 0, 0, 0
- NEXT
- xbut = (((xcur - 40) \ 25) * 25) + 40 'calc button
- Button xbut, 74, 1, 0, 0 'push it in
- levelnum = ((xcur - 40) \ 25) 'calc levelnum
- droptime! = (.5 / (levelnum + 1)) 'calc new droptime
- END IF
- END IF
-
-
- IF ycur >= 104 AND ycur <= 118 THEN 'handicap select
- IF xcur >= 40 AND xcur <= 280 THEN
- FOR x = 40 TO 265 STEP 25 'reset all buttons
- Button x, 104, 0, 0, 0 'pop 'em out
- NEXT
- xbut = (((xcur - 40) \ 25) * 25) + 40 'calc button
- Button xbut, 104, 1, 0, 0 'push it in
- handicap = ((xcur - 40) \ 25) 'calc handicap
- END IF
- END IF
-
- IF xcur >= 35 AND xcur <= 102 THEN
- SELECT CASE ycur
- CASE 25 TO 38 'slammode on
- slammode = -1 'set slammode
- Button 35, 24, 1, 1, 0 'push button
- Button 35, 44, 0, 1, 0 'pop button
- CASE 44 TO 57 'slammode off
- slammode = 0 'set slammode
- Button 35, 44, 1, 1, 0 'push button
- Button 35, 24, 0, 1, 0 'pop button
- END SELECT
- END IF
-
-
- IF xcur >= 220 AND xcur <= 284 THEN
- SELECT CASE ycur
- CASE 25 TO 38 'sound on
- soundmode = -1 'set sound
- Button 219, 24, 1, 1, 0 'push button
- Button 219, 44, 0, 1, 0 'pop button
- CASE 44 TO 57 'sound off
- soundmode = 0 'set sound
- Button 219, 24, 0, 1, 0 'push button
- Button 219, 44, 1, 1, 0 'pop button
- END SELECT
- END IF
-
-
-
- SoundFX (0)
- Stay (30)
-
- END SELECT
-
-
- LOOP
-
- CLS
-
-
- END SUB
-
- FUNCTION GetPiece
- 'Chooses and displayed next playpiece in upper left hand corner.
-
- STATIC initialize, nextplaypiece
-
-
- IF NOT initialize THEN
- playpiece = INT(RND * 7)
- nextplaypiece = INT(RND * 7)
- DrawPlayPiece 22, 14, nextplaypiece, 0
- initialize = NOT intialize
- ELSE
- DrawPlayPiece 22, 14, nextplaypiece, 0 ' erase last piece
- playpiece = nextplaypiece
- nextplaypiece = INT(RND * 7)
- DrawPlayPiece 22, 14, nextplaypiece, 0 ' draw next piece
- END IF
-
- UpdatePieceMeter (0)
-
- GetPiece = playpiece
-
- END FUNCTION
-
- FUNCTION InputText$ (xcur, ycur, length)
-
-
- PALETTE 255, (65536 * 0) + (256 * 0) + 60 'define cursor color
- DIM Edit$(length) 'dim array to edit
- ele = 1 'first element
- DIM background(35, length + 2)
- GET (xcur, ycur)-(xcur + 6, ycur + 8), background(35, 1)
- p5x7font xcur, ycur, "_", 255 'init curser
-
-
- Clearbuffer
-
- DO
-
- DO 'event loop
- event = ReturnEvent 'anything happen ?
- IF dir = 0 THEN 'strobe cursor
- red = red + 1: IF red > 62 THEN dir = 1 'ditto
- ELSE 'ditto
- red = red - 1: IF red < 10 THEN dir = 0 'ditto
- END IF 'ditto
- PALETTE 255, (65536 * blu) + (256 * grn) + red 'ditto
- LOOP UNTIL event 'back for event
-
- SELECT CASE event
- CASE Esc: EXIT DO 'do Esc
- CASE enter: EXIT DO 'do enter
- CASE 1 TO 7, 9 TO 126 'do regular keys
- event$ = CHR$(event) 'convert for printing
- IF ele < length THEN 'stay in bounds
- PUT (xcur, ycur), background(35, ele), PSET
- p5x7font xcur, ycur, CHR$(event), 144 'print font
- Edit$(ele) = event$ 'for backspace
- SELECT CASE event$ 'adjust kern
- CASE "i": xcur = xcur + 2 'ditto
- CASE "j": xcur = xcur + 5 'ditto
- CASE "l": xcur = xcur + 2 'ditto
- CASE "r": xcur = xcur + 5 'ditto
- CASE ".": xcur = xcur + 3 'ditto
- CASE "(": xcur = xcur + 3 'ditto
- CASE ")": xcur = xcur + 3 'ditto
- CASE "'": xcur = xcur + 2 'ditto
- CASE "!": xcur = xcur + 2 'ditto
- CASE ELSE: xcur = xcur + 6 'ditto
- END SELECT
- ele = ele + 1 'adjust
- GET (xcur, ycur)-(xcur + 6, ycur + 8), background(35, ele)
- p5x7font xcur, ycur, "_", 255 'print cursor
- END IF
-
- CASE backspace, left 'do backspace
- IF ele > 1 THEN
- PUT (xcur, ycur), background(35, ele), PSET
- ele = ele - 1 'adjust
- SELECT CASE (Edit$(ele)) 'adjust kern
- CASE "i": xcur = xcur - 2 'ditto
- CASE "j": xcur = xcur - 5 'ditto
- CASE "l": xcur = xcur - 2 'ditto
- CASE "r": xcur = xcur - 5 'ditto
- CASE ".": xcur = xcur - 3 'ditto
- CASE "(": xcur = xcur - 3 'ditto
- CASE ")": xcur = xcur - 3 'ditto
- CASE "'": xcur = xcur - 2 'ditto
- CASE "!": xcur = xcur - 2 'ditto
- CASE ELSE: xcur = xcur - 6 'ditto
- END SELECT
- PUT (xcur, ycur), background(35, ele), PSET
- p5x7font xcur, ycur, "_", 255 'print cursor
- Edit$(ele) = CHR$(space) 'clear element
- END IF
- END SELECT
- LOOP
-
- FOR n = 1 TO length - 1 'put elements into a string
- IF Edit$(n) = "" THEN Edit$(n) = CHR$(space) 'replace nulls
- Temp$ = Temp$ + Edit$(n) 'create string
- NEXT n
-
- InputText$ = Temp$
-
-
- END FUNCTION
-
- SUB P3x5Num (x, y, num, colour)
-
- Temp$ = LTRIM$(STR$(num)) 'convert number to string
- length = LEN(Temp$) 'get it's length
-
- FOR ele = 1 TO length 'print charactors in string
- offset = ASC(MID$(Temp$, ele, 1)) - 48 'extract charactor/calc array offset
- FOR ypos = 1 TO 5 'top to bottom
- FOR xpos = 1 TO 3 'left to right
- IF smallnum(offset, ypos, xpos) = 1 THEN 'set bits only
- PSET (x + xpos + xkern, y + ypos), colour 'PSET using colour
- END IF
- NEXT xpos
- NEXT ypos
- xkern = xkern + 4 'adjust kern
- Clearbuffer 'clear the buffer
- NEXT ele
-
- END SUB
-
- SUB p5x7font (x, y, text$, colour)
-
- length = LEN(text$) 'get characters to print
- IF length = 0 THEN EXIT SUB 'check length
-
- FOR char = 0 TO length - 1 'print loop
-
- piece$ = MID$(text$, char + 1, 1) 'look at each piece of string
- aski = ASC(piece$) 'assign it's ASCII value
-
- SELECT CASE (piece$) 'adjust lower case
- CASE "g": kerny = kerny + 2 'ditto
- CASE "j": kerny = kerny + 2 'ditto
- CASE "p": kerny = kerny + 2 'ditto
- CASE "q": kerny = kerny + 2 'ditto
- CASE "y": kerny = kerny + 2 'ditto
- END SELECT
-
- FOR ybit = 0 TO 6 'top to Bottom
- FOR xbit = 0 TO 4 'left to right
- IF font(aski, xbit, ybit) = 1 THEN 'set true bits only
- PSET (x + xbit + kernx, y + ybit + kerny), colour 'PSET data
- END IF
- NEXT
- NEXT
-
- SELECT CASE (piece$) 'kern adjusment
- CASE "i": kernx = kernx + 2 'ditto
- CASE "j": kernx = kernx + 5 'ditto
- CASE "l": kernx = kernx + 2 'ditto
- CASE "r": kernx = kernx + 5 'ditto
- CASE ".": kernx = kernx + 3 'ditto
- CASE "(": kernx = kernx + 3 'ditto
- CASE ")": kernx = kernx + 3 'ditto
- CASE "'": kernx = kernx + 2 'ditto
- CASE "!": kernx = kernx + 2 'ditto
- CASE ELSE: kernx = kernx + 6 'ditto
- END SELECT
-
- kerny = 0 'reset
-
- NEXT
-
-
- END SUB
-
- SUB PauseGame
-
- SoundFX 2
- GetArea 242, 85, 292, 97, 0
- p5x7font 242, 85, "Paused", 47
- DO: LOOP UNTIL ReturnEvent
- CALL GetArea(1, 1, 0, 0, 1)
- Newcycle = false
- SoundFX 3
-
- END SUB
-
- SUB RestorePal
-
- DIM pal(256) AS hues 'DIM array for palette
- DEF SEG = VARSEG(pal(0)) 'point to it
- BLOAD "QBMATRIX.PAL", 0 'load palette
-
- OUT &H3C8, 0 'inform video card
- FOR c = 0 TO 255 'load all registers
- OUT &H3C9, pal(c).red 'send red component
- OUT &H3C9, pal(c).grn 'send green component
- OUT &H3C9, pal(c).blu 'send blue component
- NEXT
-
- END SUB
-
- FUNCTION ReturnEvent
-
- kee$ = INKEY$ 'get key from buffer
-
- IF kee$ <> "" THEN 'key pressed ?
- IF LEN(kee$) = 1 THEN 'whats the length ?
- keycode = ASC(kee$) 'it's a regular key
- ELSE
- keycode = -ASC(RIGHT$(kee$, 1)) 'it's an extented key
- END IF
- END IF
-
-
- ReturnEvent = keycode 'return the event
-
-
- END FUNCTION
-
- SUB ShowHighScores (score() AS highscores, mode)
-
-
- CLS
-
- tile = (RND * 14) + 1 'get a random tile
- TileScreen (tile) 'tile the screen
-
- p5x7font 111, 17, "Matrix Hall of Fame", 0
- p5x7font 110, 16, "Matrix Hall of Fame", 144
-
- p5x7font 20, 25, "Rank Lines Score", 0
- p5x7font 20, 25, "Rank Lines Score", 30
-
- placey = 35
- shadow = 1
-
- FOR a = 1 TO 15
- p5x7font 22 + shadow, placey + shadow, score(a).rank, 0
- p5x7font 38 + shadow, placey + shadow, score(a).dat, 0
- p5x7font 93 + shadow, placey + shadow, score(a).nam, 0
- p5x7font 240 + shadow, placey + shadow, score(a).lines, 0
- p5x7font 268 + shadow, placey + shadow, score(a).num, 0
- p5x7font 22, placey, score(a).rank, 144
- p5x7font 38, placey, score(a).dat, 144
- p5x7font 93, placey, score(a).nam, 144
- p5x7font 240, placey, score(a).lines, 144
- p5x7font 268, placey, score(a).num, 144
- placey = placey + 10 ' drop y to a new line
- NEXT a
-
- IF mode THEN EXIT SUB
-
- DO
-
- FOR x = 19 TO 419 STEP 5 ' highlights highscore entry
- FOR y = 35 TO 42
- FOR offsetx = 0 TO 10
- IF POINT(x + offsetx, y) = 144 THEN PSET (x + offsetx, y), 8
- IF ReturnEvent THEN EXIT DO
- NEXT
- NEXT
- Stay (40)
- FOR y = 35 TO 42
- FOR offsetx = 0 TO 10
- IF POINT(x + offsetx, y) = 8 THEN PSET (x + offsetx, y), 144
- IF ReturnEvent THEN EXIT DO
- NEXT
- NEXT
- NEXT
-
- LOOP UNTIL ReturnEvent
-
-
- END SUB
-
- DEFSNG A-Z
- SUB SoundFX (fx%)
-
- IF soundmode% = 0 THEN EXIT SUB
-
-
- SELECT CASE fx%
-
- CASE 0 'landing hit
- frequency = 147
- FOR scale = 6 TO 1 STEP -1
- duration = scale / 100
- frequency = frequency + 47
- SOUND frequency, duration
- NEXT
-
- CASE 1 'Row clear
- FOR scale = 6 TO 1 STEP -1
- duration = scale / 10
- frequency = frequency + 100
- SOUND frequency, duration
- NEXT
- Stay (27)
- SOUND 700, .1
- SOUND 800, .2
- SOUND 900, .3
-
- CASE 2 ' event leave noise
- SOUND 1000, .1
- Stay (210)
- SOUND 2000, .1
-
- CASE 3 'event enter noise
- SOUND 2000, .1
- Stay (210)
- SOUND 1000, .1
-
-
- CASE 4 'game end
- decay = 10
- duration = .1
- FOR freq = 500 TO 100 STEP -decay
- SOUND freq, duration
- Stay (20)
- Clearbuffer
- NEXT
- decay = 10
- duration! = .1
- FOR frequency = 500 TO 100 STEP -decay
- SOUND frequency, duration
- Stay (50)
- Clearbuffer
- NEXT
-
- END SELECT
-
- END SUB
-
- SUB Stay (Millisecs)
-
- STATIC syspeed&, Time2
-
-
- IF syspeed& THEN ' First time here -get relative system speed
- IF Millisecs THEN ' Start Delay loop
-
- Factor& = (syspeed& * Millisecs) \ 55 'num of loops needed
-
- DO ' delay loop
- Factor& = Factor& - 1 ' Sub the num of loops
- LOOP UNTIL Time2 = PEEK(&H6C) OR Factor& = 0 ' make loop same as below
-
- END IF
- ELSE ' Relative system speed processed here
- DEF SEG = &H40
- Time1 = PEEK(&H6C)
-
- DO
- Time2 = PEEK(&H6C) ' get another
- LOOP UNTIL Time1 <> Time2 ' loop until new clock tick
-
- DO ' start here at new clock tick
- syspeed& = syspeed& - 1 ' Count the number of times looped
- LOOP UNTIL Time2 <> PEEK(&H6C) OR syspeed& = 0 'make same as loop above
- Time2 = 1255
- syspeed& = ABS(syspeed&) 'cant use this neg -reverse it
-
- END IF
-
-
-
- END SUB
-
- DEFINT A-Z
- SUB TileScreen (tile)
- DIM buffer(141, 20)
- DEF SEG = VARSEG(buffer(0, 0))
- BLOAD "QBMATRIX.TL1", 0
- FOR y = 0 TO 190 STEP 14
- FOR x = 0 TO 319 STEP 20
- PUT (x, y), buffer(141, tile), PSET
- NEXT
- NEXT
- END SUB
-
- FUNCTION TimeToDrop
-
- STATIC samp!
-
- ok = false 'assume no drop
-
- IF samp! = 0 THEN
- samp! = TIMER
- ELSE
- IF ABS(TIMER - samp!) >= droptime! THEN
- ok = True
- samp! = 0
- END IF
- END IF
-
-
- TimeToDrop = ok
-
-
- END FUNCTION
-
- SUB TitleScreen
-
- col = 18 'draw background
- FOR x = 0 TO 320
- col = col + 1: IF col > 24 THEN col = 18
- x2 = 160
- y = 0
- y2 = 100
- LINE (x, y)-(x2, y2), col
- NEXT
-
- FOR x = 0 TO 320
- col = col + 1: IF col > 24 THEN col = 18
- x2 = 160
- y = 200
- y2 = 100
- LINE (x, y)-(x2, y2), col
- NEXT
-
- FOR y = 0 TO 200
- col = col + 1: IF col > 24 THEN col = 18
- x2 = 160
- x = 0
- y2 = 100
- LINE (x, y)-(x2, y2), col
- NEXT
-
- FOR y = 0 TO 200
- col = col + 1: IF col > 24 THEN col = 18
- x2 = 160
- x = 320
- y2 = 100
- LINE (x, y)-(x2, y2), col
- NEXT
-
-
- Clearbuffer 'clearkeybuffer
-
- p5x7font 133, 50, "QB Matrix", 138 'shadow title
- p5x7font 133, 51, "QB Matrix", 54 'print title
-
-
-
- p5x7font 57, 105, "Copyright ", 138 'shadow Copyright
- CIRCLE (118, 110), 5, 138 'ditto
- CIRCLE (118, 110), 2, 138, 1, 5 'ditto
- p5x7font 129, 106, "1996", 138 'ditto
- p5x7font 162, 106, "Nocturnal Creations", 138 'ditto
-
- p5x7font 58, 105, "Copyright ", 0 'print Copyright
- CIRCLE (119, 110), 5, 0 'ditto
- CIRCLE (119, 110), 2, 0, 1, 5 'ditto
- p5x7font 130, 106, "1996", 0 'ditto
- p5x7font 161, 106, "Nocturnal Creations", 0 'ditto
-
- p5x7font 96, 161, "Press any key to start.", 138 'ditto
- p5x7font 96, 160, "Press any key to start.", 26 'ditto
-
- col! = 65536
- var1 = 15
- var2 = 30
- var3 = 45
- var4 = 62
-
- DO ' animate background
-
- PALETTE 18, var1 * col!
- IF CountForwards1 = 0 THEN
- var1 = var1 + 1
- IF var1 >= 62 THEN CountForwards1 = 1
- ELSE
- var1 = var1 - 1
- IF var1 <= 20 THEN CountForwards1 = 0
- END IF
-
- PALETTE 24, var2 * col!
- IF CountForwards2 = 0 THEN
- var2 = var2 + 1
- IF var2 >= 62 THEN CountForwards2 = 1
- ELSE
- var2 = var2 - 1
- IF var2 <= 20 THEN CountForwards2 = 0
- END IF
-
- PALETTE 21, var3 * col!
- IF CountForwards3 = 0 THEN
- var3 = var3 + 1
- IF var3 >= 62 THEN CountForwards3 = 1
- ELSE
- var3 = var3 - 1
- IF var3 <= 20 THEN CountForwards3 = 0
- END IF
-
- PALETTE 19, var4 * col!
- IF CountForwards4 = 0 THEN
- var4 = var4 + 1
- IF var4 >= 62 THEN CountForwards4 = 1
- ELSE
- var4 = var4 - 1
- IF var4 <= 20 THEN CountForwards4 = 0
- END IF
-
- PALETTE 22, var2 * col!
- PALETTE 23, var3 * col!
-
- event = ReturnEvent 'check for events
-
- SELECT CASE event 'process 'em
- CASE false 'absorb Nulls
- CASE Esc: EndToQBasic 'end game
- CASE ELSE: RestorePal: EXIT DO 'play game
-
- END SELECT
-
- LOOP
-
-
-
- END SUB
-
- SUB UpdatePieceMeter (mode)
-
- STATIC bg1(), xm(), ym(), Total(), bg2(), xhigh
-
- xstart = 145 'set start values
- ystart = 110 'ditto
- xlimit = 200 'limit travel
-
-
- IF mode = -1 THEN
- DIM bg1(160, 7) 'To restore background behind pieces
- DIM bg2(105, 8) 'To restore background behind small numbers
- DIM xm(6) 'x placement
- DIM ym(6) 'y placement
- DIM Total(6) 'Total of each piece played
-
- FOR piece = 0 TO 6 'initialize all pieces
- xm(piece) = xstart 'set coordinates
- ym(piece) = ystart 'ditto
- ystart = ystart + 10 'adjust y
-
- ' GET background info
- GET (xm(piece), ym(piece))-(xm(piece) + 20, ym(piece) + 8), bg1(160, piece)
- GET (xm(piece) + 24, ym(piece) + 2)-(xm(piece) + 36, ym(piece) + 8), bg2(105, piece)
- GET (xm(piece) + 24, 180)-(xm(piece) + 41, 180 + 8), bg2(105, 7)
-
-
- FOR y = 1 TO 8 'from top to bottom
- FOR x = 1 TO 20 'left to right
- dat = meterpieces(piece, x, y) 'get data
- IF dat <> 0 THEN PSET (xm(piece) + x, ym(piece) + y), dat 'PSET data
- NEXT x 'next x
- NEXT y 'next y
-
- P3x5Num xm(piece) + 24, ym(piece) + 1, 0, 92 'print numbers
-
- NEXT piece 'next piece
-
- ELSE 'move meter bitmaps
-
-
- 'restore background
- PUT (xm(playpiece), ym(playpiece)), bg1(160, 0), PSET
- PUT ((xm(playpiece) + 24), ym(playpiece) + 2), bg2(105, 0), PSET
- PUT ((xhigh + 24), 180), bg2(105, 7), PSET
-
- Total(playpiece) = Total(playpiece) + 1 'increment piece total
-
- xm(playpiece) = xm(playpiece) + 1 'increment piece x value
- IF xm(playpiece) > xlimit THEN xm(playpiece) = xstart 'keep in bounds
- 'print value
- P3x5Num xm(playpiece) + 24, ym(playpiece) + 1, Total(playpiece), 92
-
- FOR y = 1 TO 8 'top to bottom
- FOR x = 1 TO 20 'left to right
- dat = meterpieces(playpiece, x, y) 'get data
- IF dat <> 0 THEN PSET (xm(playpiece) + x, ym(playpiece) + y), dat
- NEXT x 'next x
- NEXT y 'next y
-
- END IF
-
-
- 'Tally the number of pieces played and display the result.
-
- FOR piece = 0 TO 6 'count each piece
- piecetotal = piecetotal + Total(piece) 'add 'em up
- NEXT 'next piece
-
- ' Find the piece with the highest value and use its x value
-
- FOR piece = 0 TO 6 'look at each piece
- xdata = xm(playpiece) 'get it's x value
- IF xhigh < xdata THEN xhigh = xdata 'adjust xhigh
- NEXT
-
- P3x5Num xhigh + 24, 180, piecetotal, 93 'print total pieces played
-
-
- END SUB
-
- SUB Updatescore
-
- Clearbuffer 'clear buffer
-
- ygrid = -(((ypiece / blockheight) - 5) - 22) 'calc landing
- mult = levelnum + 1 'calc multiplier
- points = (mult * mult) + (ygrid * mult) 'calc points
- gamescore& = gamescore& + points 'add 'em
-
-
- LINE (170, 50)-(207, 58), 121, BF 'erase old score
- gamescore$ = LTRIM$(STR$(gamescore&)) 'convert to string
- p5x7font 170, 50, gamescore$, 69 'report
-
-
- LINE (166, 80)-(202, 88), 121, BF 'erase old
- linescleared$ = LTRIM$(STR$(linescleared)) 'convert to a string
- p5x7font 166, 80, linescleared$, 73 'report
-
- LINE (267, 121)-(292, 128), 121, BF 'ditto
- single$ = LTRIM$(STR$(sngle))
- p5x7font 267, 121, single$, 86
-
- LINE (267, 141)-(292, 148), 121, BF 'ditto
- double$ = LTRIM$(STR$(duble))
- p5x7font 267, 141, double$, 88
-
- LINE (267, 161)-(292, 168), 121, BF 'ditto
- triple$ = LTRIM$(STR$(triple))
- p5x7font 267, 161, triple$, 90
-
- LINE (267, 179)-(292, 188), 121, BF 'ditto
- matrix$ = LTRIM$(STR$(matrix))
- p5x7font 267, 179, matrix$, 92
-
-
-
- IF linescleared >= nextlevelmark THEN 'change level ?
- levelnum = levelnum + 1 'increment level
- nextlevelmark = nextlevelmark + levelmark 'adjust next level marker
- IF levelnum < 10 THEN
- droptime! = droptime! - .05 'calc new droptime
- END IF
- ChangePitPal 'change pit color
- levelnum$ = LTRIM$(STR$(levelnum)) 'convert to a string
- LINE (111, 14)-(122, 21), 0, BF 'erase old
- p5x7font 111, 14, levelnum$, 67 'report new
- END IF
-
- Clearbuffer 'clear the keybuffer
-
- END SUB
-
-